package com.xreal.netty.server.handler;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;


/**
 * @author yangzhongming
 * @desc 协议处理相关类
 * @date 2022/6/14
 */
@SuppressWarnings("unused")
public class CustomServerHandler extends ChannelInboundHandlerAdapter {

    /**
     * 注册和激活：当客户端连接时，首先会触发注册，进行一些初始化的工作，然后激活连接，就可以收发消息了。
     * 断开和注销：当客户端断开时，反向操作，先断开，再注销。
     * 读取消息：当收到客户端消息时，首先读取，然后触发读取完成。
     * 发生异常：不多解释了。
     * 用户事件：由用户触发的各种非常规事件，根据evt的类型来判断不同的事件类型，从而进行不同的处理。
     * 可写状态变更：收到消息后，要回复消息，会先把回复内容写到缓冲区。而缓冲区大小是有一定限制的，当达到上限以后，可写状态就会变为否，不能再写。等缓冲区的内容被冲刷掉后，缓冲区又有了空间，可写状态又会变为是。
     * ————————————————
     */


    public void channelRegistered(ChannelHandlerContext ctx) {
        System.out.println("server 注册");
    }

    public void channelActive(ChannelHandlerContext ctx) {
        System.out.println("server 激活");
    }

    public void channelInactive(ChannelHandlerContext ctx) {
        System.out.println("server 断开");
    }

    public void channelUnregistered(ChannelHandlerContext ctx) {
        System.out.println("server 注销");
    }

    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        ByteBuf byteBuf = (ByteBuf) msg;
        System.out.println("server 读取消息 " + byteBuf.toString(CharsetUtil.UTF_8));
    }

    public void channelReadComplete(ChannelHandlerContext ctx) {
        System.out.println("server 消息读取完成");
    }

    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
        System.out.println("server 用户事件");
    }

    public void channelWritabilityChanged(ChannelHandlerContext ctx) {
        System.out.println("server 可写状态变更为" + ctx.channel().isWritable());
    }

    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        System.out.println("发生异常");
    }
}
